/******************************************************************************
 *
 * Project:		SerwerSemaforow
 * File:		pinging_thread.h
 * Author:		karooolek
 * Created on:	2010-01-22
 *
 ******************************************************************************/

#ifndef PINGING_THREAD_H_
#define PINGING_THREAD_H_

#include "thread.h"
#include "messages.h"
#include "connection.h"
#include <list>


/**
 * Watek pingujacy polaczenia.
 */
class PingingThread: public Thread
{
private:
	/**
	 * Odstep pingowania.
	 */
	volatile float _interval;

	/**
	 * Polaczenia do pingowania.
	 */
	std::list<Connection *> _conns;

	/**
	 * Uruchom watek.
	 */
	void _run();

public:
	/**
	 * Utworz watek z okreslonym odstepem pingowania.
	 * @param interval odstep pingowania w sekundach.
	 */
	PingingThread(float interval = 1.0f);

	/**
	 * Usun watek.
	 */
	virtual ~PingingThread();

	/**
	 * Pobierz odstep pingowania.
	 * @return odstep pingowania.
	 */
	float getInterval() const
	{
		return _interval;
	}

	/**
	 * Ustaw odstep pingowania.
	 * @param interval odstep pingowania w sekundach..
	 */
	void setInterval(float interval)
	{
		if(interval <= 0.0f)
		{
			return;
		}

		_interval = interval;
	}

	/**
	 * Pobierz polaczenia do pingowania.
	 * @return polaczenia do pingowania.
	 */
	const std::list<Connection *> &getConnections() const
	{
		return _conns;
	}

	/**
	 * Dodaj polaczenie do pinogwania.
	 * @param conn polaczenei do pingowania.
	 */
	void addConnection(Connection *conn)
	{
		if(!conn)
		{
			return;
		}

		_conns.push_back(conn);
	}

	/**
	 * Usun polaczenie do pingowania.
	 * @param conn polaczenie do pingowania.
	 */
	void removeConnection(Connection *conn)
	{
		_conns.remove(conn);
	}
};

#endif // PINGING_THREAD_H_
